;##################################
;命令：
;nasm -f elf64 day7_0vector_2shuffle_0xmm_1double.asm -o main.o && gcc main.o -o main -lc -no-pie && ./main
;输出：
;Value in arr[0] is 1.111100.
;Value in arr[1] is 2.234500.
;##################################
extern printf

section .data
	msg: db `Value in arr[%d] is %f.\n`, 0
	arr0: dq 1.1111, 2.2222
	arr1: dq 1.1234, 2.2345

section .text
	global main

main:
	push rbp
	mov rbp, rsp

;################################################
	vmovupd xmm0, [arr0]
	vmovupd xmm1, [arr1]
	;取1.111100, 2.234500
	;由于xmm只有两个double数
	;因而只需要一位2进制数即可表示选择哪个数
	;选1.111100取0
	;选2.234500取1
	;逆序10
	vshufpd xmm0, xmm1, 10b
	vmovupd [arr0], xmm0
;################################################

	;打印
	mov ebx, 0
	jmp compare

execute:
	mov rdi, msg
	movsxd rsi, ebx
	movq xmm0, qword [arr0 + 8 * ebx]
	movq rdx, xmm0
	call printf

	inc ebx

compare:
	cmp ebx, 2
	jl execute

	mov eax, 0
	leave
	ret
